/** Keriosity, ESIR 2
 * 	MapTracer (Modele): classe permettant d'ajouter des points sur la carte
 *	@author: GOUYET Brett
 *	@date: 14/05/2012 
 */

package keriosity.map;

import java.util.ArrayList;
import org.osmdroid.DefaultResourceProxyImpl;
import org.osmdroid.api.IMapView;
import org.osmdroid.util.GeoPoint;
import org.osmdroid.views.MapView;
import org.osmdroid.views.overlay.ItemizedOverlay;
import org.osmdroid.views.overlay.OverlayItem;
import android.content.Context;
import android.graphics.Point;
import android.graphics.drawable.Drawable;


/** Calque de la carte sur lequel on va dessiner les points **/
public class MapTracer extends ItemizedOverlay<OverlayItem> {
	 
	//l'element 0 de overlayItemList sera Keriosity
	protected ArrayList<OverlayItem> overlayItemList = new ArrayList<OverlayItem>(); //notre voile
	protected Context _context;
	protected IMap _map;
 
	
	/** CONSTRUCTEUR **/
	public MapTracer(Drawable marker, Context context, IMap map){
 
		super(marker, new DefaultResourceProxyImpl(context));
		_context = context;
		_map = map;
	}
	
	
	/** Methode annulant la selection de la derniere destination **/
	public void undo(){
		
		int nbElement = overlayItemList.size();
		if(nbElement > 1){
			overlayItemList.remove(nbElement-1); //on enleve le dernier element
			nbElement--;
			
			if(nbElement > 1) //si on a d'autres destinations, on recupere la derniere
				_map.setDestination(overlayItemList.get(nbElement-1).getPoint()); //on prend la destination du dernier element
			
			else //si il n'y a plus d'autre destination, celle-ci vaut null
				_map.setDestination(null);
			populate();
		}
	}

	
	/** Methode effacant toute les destinations sauf la derniere **/
	public void clean(){
		
		if(overlayItemList.size() > 0){
			OverlayItem keriosity = overlayItemList.get(0);
			overlayItemList.clear(); //on supprime tout les elements
						
			//on rajoute keriosity et la destination
			if(keriosity != null)
				overlayItemList.add(keriosity);	
			if(_map.getDestination() != null)
				overlayItemList.add(new OverlayItem("Destination", "Destination", _map.getDestination()));	
			populate();		
		}
	}

	
	/** On ajoute des elements a notre carte **/
	public void addItem(GeoPoint p, String title, String snippet){
 
		OverlayItem newItem = new OverlayItem(title, snippet, p);
		overlayItemList.add(newItem);
		populate(); 
	}
 
	
	/** Methode ajoutant une destination a la carte **/
	public void addDestination(GeoPoint p, String title, String snippet){
		
		//on ajoute une destination que si on a deja ajoute Keriosity a la liste
		if(overlayItemList.size() > 0){
			addItem(p, title, snippet);
			populate(); 
		}
	}
	
	
	/** On modifie les coordonees de notre objet **/
	public void setGeoPoint(int index, int latitude, int longitude){
		
		if(index < overlayItemList.size() && index >= 0)
			overlayItemList.get(index).getPoint().setCoordsE6(latitude, longitude);
	}
	
	
	/** Modifie le marker d'un OverlayItem de la liste **/
	public void setMarker(int index, Drawable newMarker){
		
		if(index < overlayItemList.size())
			overlayItemList.get(index).setMarker(newMarker);
	}
	
	
		/* Methodes implementees non utilisees */
	
	public boolean onSnapToItem(int arg0, int arg1, Point arg2, IMapView arg3) {return false;}
	 
	protected OverlayItem createItem(int arg0) {return overlayItemList.get(arg0);}
	 
	public int size() {return overlayItemList.size();}
	
	public boolean onSnapToItem(int arg0, int arg1, Point arg2, MapView arg3) {return false;}
 
}  
